import re

from .models import User


def valid_register_username(username):
    """此函数用于判断用户名是否合法"""
    pattern = re.compile(r'\W+')
    result = pattern.search(username)
    if result:
        return '用户名只能包含字母，数字，下划线'
    if len(User.objects.filter(username=username)) != 0:
        return '用户名已被注册'
    elif len(username) < 2 or len(username) > 20:
        return '用户名应该在2-20个字符以内'
    else:
        return ''


def valid_register_password(password, password_confirm):
    """此函数用于判断密码是否合法"""
    if len(password) < 8 or len(password) > 30:
        return '密码应该在8-30个字符以内'
    elif password != password_confirm:
        return '两次密码不相符'
    else:
        return ''


def valid_login_username(username):
    """此函数用于判断登录时用户名是否存在"""
    if len(User.objects.filter(username=username)) == 0:
        return '用户名不存在'
    else:
        return ''


def valid_login_password(username, password):
    """此函数用于验证登录时用户存在密码是否正确"""
    # 用户名已存在，不用担心发生异常
    user = User.objects.get(username=username)
    # 密码需要用特殊方法验证
    if user.check_password(password) is False:
        return '密码不正确'
    else:
        return ''


def valid_retrieve_username(username):
    """此函数用于判断登录时用户名是否存在"""
    if len(User.objects.filter(username=username)) == 0:
        return '用户名不存在'
    else:
        return ''


def valid_retrieve_encrypted(answer, user_answer):
    """此函数用于判断密保回答是否正确"""
    # 用户名已经得到验证，不用担心发生异常
    if answer != user_answer:
        return '密保问题回答错误，请重试'
    else:
        return ''


def valid_retrieve_password(password, password_confirm):
    """此函数用于重置密码时判断密码合法性"""
    if len(password) < 8 or len(password) > 30:
        return '密码应该在8-30个字符以内'
    elif password != password_confirm:
        return '两次密码不相符'
    else:
        return ''


def valid_school(school):
    """此函数用于验证填入的学校长度是否超出范围"""
    if len(school) > 40:
        return '学校名称过长，请控制在40个字符以内'
    else:
        return ''


def valid_company(company):
    """此函数用于验证填入的公司长度是否超出范围"""
    if len(company) > 40:
        return '公司名称过长，请控制在40个字符以内'
    else:
        return ''


def valid_profession(profession):
    """此函数用于验证填入的职业长度是否超出范围"""
    if len(profession) > 20:
        return '职业名称过长，请控制在40个字符以内'
    else:
        return ''


def valid_head_portrait(image):
    """此函数用于验证图像格式是否正确"""
    # 获取图像后缀
    suffix = image.name.split('.')[-1]
    if suffix not in ('jpeg', 'tiff', 'png', 'bmp', 'gif', 'jpg'):
        return '请上传正确的图像格式，支持jpeg tiff png bmp gif'
    else:
        return ''


def valid_question(question):
    """此函数用于验证密保问题是否符合要求"""
    if len(question) == 0:
        return '密保问题不能为空'
    elif len(question) > 40:
        return '密保问题不能超过40个字符'
    else:
        return ''


def valid_answer(answer):
    """此函数用于验证答案是否符合要求"""
    if len(answer) == 0:
        return '答案不能为空'
    elif len(answer) > 40:
        return '答案不能超过40个字符'
    else:
        return ''


def valid_email(email):
    """此函数用于验证邮箱格式是否正确"""
    regex = re.compile(r'[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-z]+')
    if regex.match(email.strip()):
        return ''
    else:
        return '邮箱格式不正确'
